#ifndef INFRASTRUCTURE_VEHICLE_MKLM_STATUS_PROVIDER_H
#define INFRASTRUCTURE_VEHICLE_MKLM_STATUS_PROVIDER_H

#include "kernel/agv/i_agv_status_provider.h"
#include "kernel/interfaces/ILogger.h"
#include "mklm_server_manager.h"
#include <QObject>
#include <memory>

namespace infrastructure {
namespace vehicle {
namespace mklm {

/**
 * @brief MKLM AGV 状态提供者（被动接收模式）
 * @details 注册到共享的 MklmServerManager，接收 AGV 主动上传的数据
 *          所有 MKLM AGV 共用一个监听端口
 */
class MklmStatusProvider : public QObject, public kernel::agv::IAgvStatusProvider {
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param agvNumber AGV 编号
     * @param logger 日志器
     * @param parent Qt 父对象
     */
    explicit MklmStatusProvider(
        int agvNumber,
        std::shared_ptr<kernel::ILogger> logger,
        QObject* parent = nullptr
    );

    ~MklmStatusProvider() override;

    // IAgvStatusProvider 接口实现
    kernel::Result<void> start() override;
    void stop() override;
    bool isRunning() const override;
    void setStatusUpdateCallback(StatusUpdateCallback callback) override;
    int getAgvNumber() const override;

    /**
     * @brief 设置共享服务器监听端口（静态方法，所有实例共享）
     * @param port 监听端口
     */
    static void setServerPort(quint16 port);

    /**
     * @brief 获取共享服务器监听端口
     */
    static quint16 getServerPort();

private:
    int m_agvNumber;
    std::shared_ptr<kernel::ILogger> m_logger;
    StatusUpdateCallback m_statusCallback;
    bool m_isRunning{false};

    static quint16 s_serverPort;  // 共享的服务器端口（默认 29204)

    /**
     * @brief 内部状态更新处理（从 ServerManager 回调）
     * @details 将 MklmAgvStatusDTO 转换为通用 AgvStatusDTO
     */
    void onStatusUpdate(const kernel::dtos::MklmAgvStatusDTO& status);
};

} // namespace mklm
} // namespace vehicle
} // namespace infrastructure

#endif // INFRASTRUCTURE_VEHICLE_MKLM_STATUS_PROVIDER_H

